【ThinkPHP6.x框架】(10)模型2(获取器和修改器)

您所在的位置:网站首页 tp6 view 大写 转化为 下划线 【ThinkPHP6.x框架】(10)模型2(获取器和修改器)

【ThinkPHP6.x框架】(10)模型2(获取器和修改器)

2024-07-09 12:50| 来源: 网络整理| 查看: 265

模型获取器

        获取器的作用是对模型实例的数据做出自动处理。一个获取器对应模型的一个特殊方法,该方法为  public。方法名的命名规范为:getFieldAttr()。举个例子,数据库表示状态status字段采用的是数值;而页面上,我们需要输出status字段希望是中文,就可以使用获取器;在 User模型端,我创建一个对外的方法,如下:

public function getStatusAttr($value) { $status = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核']; return $status[$value]; }

        然后,在控制器端,直接输出数据库字段的值即可得到获取器转换的对应值;

$user = UserModel::find(19); return $user->status;

        除了getFieldAttr中Field可以是字段值,也可以是自定义的虚拟字段。Nothing这个字段不存在,而此时参数$value只是为了占位,并未使用;第二个参数$data得到的是筛选到的数据,然后得到最终值。

public function getNothingAttr($value, $data) { $myGet = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核']; return $myGet[$data['status']]; } return $user->nothing;

        如果你定义了获取器,并且想获取原始值,可以使用getData()方法。这里的返回值就是-1、0、1、2中的一个。

return $user->getData('status');

        直接输出无参数的  getData(),可以得到原始值,而$user输出是改变后的;

dump($user->getData()); dump($user);

        使用 WithAttr在控制器端实现动态获取器,下面给出两个例子。

// 设置所有email为大写 $user = UserModel::WithAttr('email', function ($value) { return strtoupper($value); })->select(); return json($user); // 比如设置 status翻译为中文 $user = UserModel::WithAttr('status', function ($value) { $status = [-1=>'删除', 0=>'禁用', 1=>'正常', 2=>'待审核']; return $status[$value]; })->select(); return json($user);

        同时定义了模型获取器和动态获取器,那么动态获取器优先级更高;

模型修改器

        模型修改器的作用,就是对模型设置对象的值进行处理。比如,我们要新增数据的时候,对数据就行格式化、过滤、转换等处理。模型修改器的命名规则为:setFieldAttr。我们要设置一个新增,规定邮箱的英文都必须大写,修改器如下:

public function setEmailAttr($value) { return strtoupper($value); }

        注意:        

        除了新增,会调用修改器,修改更新也会触发修改器。

        模型修改器只对模型方法有效,调用数据库的方法是无效的,比如->insert()。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3